// 系统相关配置......
import { defineStore } from 'pinia';

interface ISystemInfoInsets {
  bottom: number;
  left: number;
  right: number;
  top: number;
}

interface ISystemInfo {
  deviceId?: string;
  appId?: string;
  appVersion?: string;
  appWgtVersion?: string;
  safeArea?: {
    left: number;
    right: number;
    top: number;
    bottom: number;
    width: number;
    height: number;
  };
  statusBarHeight?: number;
  deviceModel?: string;
  osName?: string;
  windowWidth?: number;
  windowHeight?: number;
  windowTop?: number;
  windowBottom?: number;
  safeAreaInsets?: ISystemInfoInsets;
  [key: string]: any;
}

interface State {
  systemInfo: ISystemInfo;
  navBarHeight: string | number;
  usableScreenHeight: string | number;
}
export const useSystemInfoStore = defineStore('systemInfo', {
  state: (): State => ({
    systemInfo: {
      deviceId: '', // 设备 id
      appId: '', // manifest 中应用appid，即DCloud appid。
      appVersion: '', // 应用版本。
      appWgtVersion: '', // wgt 版本名称。
      safeArea: {
        bottom: 0,
          height: 0,
          left: 0,
          right: 0,
          top: 0,
          width: 0,
      },
      statusBarHeight: 0, // 手机状态栏的高度
      deviceModel: '',  // 设备型号
      osName: '', // 系统名称 	ios、android
      windowWidth: 0, // 可使用窗口宽度
      windowHeight: 0, // 可使用窗口高度
      windowTop: 0, // 可使用窗口的顶部位置
      windowBottom: 0, // 可使用窗口的底部位置
      safeAreaInsets: { // 安全区域插入位置
        bottom: 0,
        left: 0,
        right: 0,
        top: 0,
      },
    },
    navBarHeight: 0, // eui-nav-bar 默认高度
    usableScreenHeight: 0, // 可用的屏幕高度
  }),
  actions: {
    async fetchSystemInfo() {
      try {
        const res = await uni.getSystemInfo();
        this.systemInfo = res;

        const safeAreaInsets = res.safeAreaInsets || res.safeArea; // 兼容不同版本

        // 计算顶部安全区域的实际高度（包括状态栏）
        const topSafeAreaHeight = res.statusBarHeight;
        
        // 计算底部安全区域的高度
        const bottomSafeAreaHeight = safeAreaInsets.bottom;
        
        // 计算可用的屏幕高度（排除了安全区域）
        this.usableScreenHeight = res.windowHeight - (topSafeAreaHeight + bottomSafeAreaHeight);

      } catch (error) {
        console.error('Failed to fetch system info:', error);
      }
    },
    setNavBar() {
      // 组件nav 组件默认高度88, 个性化勿用
      this.navBarHeight = uni.upx2px(88);
    },
    initFn() {
      this.fetchSystemInfo()
      this.setNavBar();
    }
  },
});